/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkgjeudestrategie;

import java.io.Serializable;

/**
 *
 * @author Admin
 */
public class Recherche implements Serializable {
    public enum TypeRecherche {


        ARMEMENT("Armement",0,100,150,200,300,500,3,4,5,6,7),
        AGRICULTURE("Agriculture",1,100,150,200,300,500,3,4,5,6,7),
        EX_RESSOURCE("Ex. ressources",2,100,150,200,300,500,3,4,5,6,7),
        COMMUNICATION("Communication",3,100,150,200,300,500,3,4,5,6,7),
        MEDECINE("Médecine",4,100,150,200,300,500,3,4,5,6,7),
        SOCIOLOGIE("Sociologie",5,100,150,200,300,500,3,4,5,6,7),
        TACTIQUE("Tactique",6,100,150,200,300,500,3,4,5,6,7),
        ECONOMIE("Économie",7,100,150,200,300,500,3,4,5,6,7),
        INFORMATIQUE("Informatique",8,100,150,200,300,500,3,4,5,6,7),
        ARMES_CHIMIQUES("Armes chimiques",9,100,150,200,300,500,3,4,5,6,7),
        ARMES_NUCLEAIRES("Armes nucléaires",10,100,150,200,300,500,3,4,5,6,7),
        VIDE("Vide",11,0,0,0,0,0,0,0,0,0,0);
        
        private String name;
        private int type;
        //cout de construction(tout identique pour l'instant)
        private int coutNv1Maintenance;
        private int coutNv2Maintenance;
        private int coutNv3Maintenance;
        private int coutNv4Maintenance;
        private int coutNv5Maintenance;
        
        private int productionTimeNv1;
        private int productionTimeNv2;
        private int productionTimeNv3;
        private int productionTimeNv4;
        private int productionTimeNv5;
        
        
        private TypeRecherche(String name,int type, int coutNv1Maintenance,int coutNv2Maintenance,int coutNv3Maintenance,int coutNv4Maintenance,int coutNv5Maintenance,int productionTimeNv1,int productionTimeNv2,int productionTimeNv3,int productionTimeNv4,int productionTimeNv5){
            this.name=name;
            this.type=type;
            this.coutNv1Maintenance=coutNv1Maintenance;
            this.coutNv2Maintenance=coutNv2Maintenance;
            this.coutNv3Maintenance=coutNv3Maintenance;
            this.coutNv4Maintenance=coutNv4Maintenance;
            this.coutNv5Maintenance=coutNv5Maintenance;
            this.productionTimeNv1=productionTimeNv1;
            this.productionTimeNv2=productionTimeNv2;
            this.productionTimeNv3=productionTimeNv3;
            this.productionTimeNv4=productionTimeNv4;
            this.productionTimeNv5=productionTimeNv5;
        }} 
 //économie, armement, nucléaire, chimique, santé, agrigulture, ...
    TypeRecherche actualRecherche=TypeRecherche.VIDE;
    int progression=0;
    private int lvlArmement=0;
    private int lvlAgriculture=0;
    private int lvlRess=0;
    private int lvlComm=0;
    private int lvlMedecine=0;
    private int lvlSocio=0;
    private int lvlTactique=0;
    private int lvlEconomie=0;
    private int lvlInformatique=0;
    private int lvlAC=0;
    private int lvlAN=0;
    int numberOfPlayer=-1;
    public Recherche(int nbPlayer){
        this.numberOfPlayer=nbPlayer;
    }
    public int getProducedHapiness(){
        int bonus=0;
        bonus=lvlSocio*5+(int)technoSom()/5;
        return bonus;
    }
    public int technoSom(){
        return lvlArmement+lvlAgriculture+lvlRess+lvlComm+lvlMedecine+lvlSocio+lvlTactique+lvlEconomie+lvlInformatique+lvlAC+lvlAN;
    }
    public String toString(){
        String s="";      
       if(actualRecherche.type!=11&&getLevel()<=4){s=actualRecherche.name+" Nv:"+getLevelOf(actualRecherche,true)+" => "+getPercentageOfCompletion()+"%";}else{s="Aucune recherche...";}
        return s;
    }
    public int getLevelOf(TypeRecherche tr,boolean choice){
        int lvl=0;
        int t=tr.type;
        if(t==11){
            lvl=0;
        }
        else if(t==0){
            if(!choice){
                lvlArmement++;
            }
            lvl=lvlArmement;
        }
        
        else if(t==1){
            if(!choice){
                lvlAgriculture++;
            }
            lvl=lvlAgriculture;
        }
        
        else if(t==2){
            if(!choice){
                lvlRess++;
            }
            lvl=lvlRess;
        }
        
        else if(t==3){
            if(!choice){
                lvlComm++;
            }
            lvl=lvlComm;
        }
        
        else if(t==4){
            if(!choice){
                lvlMedecine++;
            }
            lvl=lvlMedecine;
        }
        
        else if(t==5){
            if(!choice){
                lvlSocio++;
            }
            lvl=lvlSocio;
        }
        
        else if(t==6){
            if(!choice){
                lvlTactique++;
            }
            lvl=lvlTactique;
        }
        
        else if(t==7){
            if(!choice){
                lvlEconomie++;
            }
            lvl=lvlEconomie;
        }
        
        else if(t==8){
            if(!choice){
                lvlInformatique++;
            }
            lvl=lvlInformatique;
        }
        
        else if(t==9){
            if(!choice){
                lvlAC++;
            }
            lvl=lvlAC;
        }
        
        else if(t==10){
            if(!choice){
                lvlAN++;
            }
            lvl=lvlAN;
        }
        
        return lvl;
        
    }
    public int getType(){
        return actualRecherche.type;
    }
    public TypeRecherche getRawType(int x){
        TypeRecherche temp=TypeRecherche.VIDE;
        if(x==0){
            temp=TypeRecherche.ARMEMENT;
            
        }
        else if(x==1){
            temp=TypeRecherche.AGRICULTURE;
        }
        
        else if(x==2){
            temp=TypeRecherche.EX_RESSOURCE;
        }
        else if(x==3){
            temp=TypeRecherche.COMMUNICATION;
        }
        else if(x==4){
            temp=TypeRecherche.MEDECINE;
        }
        else if(x==5){
            temp=TypeRecherche.SOCIOLOGIE;
        }
        else if(x==6){
            temp=TypeRecherche.TACTIQUE;
        }
        else if(x==7){
           temp=TypeRecherche.ECONOMIE;
        }
        else if(x==8){
            temp=TypeRecherche.INFORMATIQUE;
        }
        else if(x==9){
            temp=TypeRecherche.ARMES_CHIMIQUES;
        }
        else if(x==10){
            temp=TypeRecherche.ARMES_NUCLEAIRES;
        }
        //else if(x==11){
        //  actualRecherche= TypeRecherche.VIDE;
       // }
        return temp;
    }
    public boolean isFinished(int x){
        TypeRecherche temp=getRawType(x);
        if(getLevelOf(temp,true) ==5){
            return true;
        }
        
        return false;
    }
    public boolean canGoNuclear(int x){
        if(getLevelOf(TypeRecherche.ARMES_CHIMIQUES,true)<5&&x==TypeRecherche.ARMES_NUCLEAIRES.type){
            
            return true;
        }
        return false;
    }
    public void setRecherche(int i){
        
        TypeRecherche tr=getRawType(i);
        if(tr.type!=actualRecherche.type){ progression=0;}
    actualRecherche=tr;
       
    }
    public int getPercentageOfCompletion(){
        double d=0;
        try{d=((double)progression/getActualRechercheInfo(0))*100;
        }catch(Exception e){}
        return (int)d;
    }
    public void upgradeRecherche(){
       if(actualRecherche.type!=11){
           progression++;
       if(progression==getActualRechercheInfo(0)&&actualRecherche.type!=11){
           getLevelOf(actualRecherche,false);
           progression=0;
       }
    }
    }
    public int getLevel(){
        return getLevelOf(actualRecherche,true);
    }
    public int getMaintenance(){
        return getActualRechercheInfo(1);
    }
    public int getActualRechercheInfo(int choice){
        if(actualRecherche!=null){
        int productionTime=0;
        int level=getLevelOf(actualRecherche,true);
        if(level==0){
            if(choice==0){productionTime=actualRecherche.productionTimeNv1;}
            else{productionTime=actualRecherche.coutNv1Maintenance;}
        }
        else if(level==1){
            if(choice==0){productionTime=actualRecherche.productionTimeNv2;}
            else{productionTime=actualRecherche.coutNv2Maintenance;}
        }
        else if(level==2){
            if(choice==0){productionTime=actualRecherche.productionTimeNv3;}
            else{productionTime=actualRecherche.coutNv3Maintenance;}
        }
        else if(level==3){
            if(choice==0){productionTime=actualRecherche.productionTimeNv4;}
            else{productionTime=actualRecherche.coutNv4Maintenance;}
        }
        else if(level==4){
            if(choice==0){productionTime=actualRecherche.productionTimeNv5;}
            else{productionTime=actualRecherche.coutNv5Maintenance;}
        }
        return productionTime;}
        return -1;
    }
    
    
    public static String getDescription(int type, int i){
        String s="";
        if(type==0){
            if(i==0){
                s="Améliorer l'armement permet d'améliorer la qualité des troupes.";
            }
            else if(i==1){s="Armement";}
            else if(i==2){s="imagespi\\recArmesIc.png";}
            else if(i==3){s="+5% de prostitution\n+10% de meurtres explosifs";}
        }
        else if(type==1){
            if(i==0){
                s="Améliorer l'agriculture permet d'améliorer la croissance de l'économie et de la population.";
            }
            else if(i==1){
            s="Agriculture";}
            else if(i==2){s="imagespi\\recAgricutureIc.png";}
            else if(i==3){s="+5% de prostitution\n+11% de meurtres explosifs";}
            
        }
        else if(type==2){
            if(i==0){
                s="Améliorer l'exploitation des ressources permet d'augmenter la productivité.";
            }
            else if(i==1){
            s="Exp. des ressources";}
            else if(i==2){s="imagespi\\recRessIc.png";}
            else if(i==3){s="+5% de prostitution\n+12% de meurtres explosifs";}
            
        }
        else if(type==3){
            if(i==0){
                s="Améliorer la communication permet d'améliorer légèrement tout les domaines.";
            }
            else if(i==1){
            s="Communications";}
            else if(i==2){s="imagespi\\recCommIc.png";}
            else if(i==3){s="+5% de prostitution\n+13% de meurtres explosifs";}
            
        }
        else if(type==4){
            if(i==0){
               s="Améliorer la médecine permet d'améliorer les soins, et donc contribue à la croissance de la population et à la préservation des vies des soldats."; 
            }
            else if(i==1){
            s="Médecine";}
            else if(i==2){s="imagespi\\recSanteeIc.png";}
            else if(i==3){s="+5% de prostitution\n+14% de meurtres explosifs";}
            
        }
        else if(type==5){
            if(i==0){
                s="Améliorer la sociologie permet d'améliorer la propagande.";
            }
            else if(i==1){
            s="Sociologie";}
            else if(i==2){s="imagespi\\recSocioIc.png";}
            else if(i==3){s="+5% de prostitution\n+15% de meurtres explosifs";}
            
        }
        else if(type==6){
            if(i==0){
             s="Améliorer la tactique donne un bonus dans les combats.";   
            }
            else if(i==1){
            s="Tactique";}
            else if(i==2){s="imagespi\\recTacticIc.png";}
            else if(i==3){s="+5% de prostitution\n+16% de meurtres explosifs";}
            
        }
        else if(type==7){
            if(i==0){
                s="Faire de la recherche en économie permet d'améliorer l'économie.";            }
            else if(i==1){
            s="Économie";}
            else if(i==2){s="imagespi\\recEconoIc.png";}
            else if(i==3){s="+5% de prostitution\n+17% de meurtres explosifs";}
            
        }
        else if(type==8){
            if(i==0){
                s="Améliorer l'informatique permet d'améliorer légèrement tout les domaines.";
            
            }
            else if(i==1){
            s="Informatique";}
            else if(i==2){s="imagespi\\recInforIc.png";}
            else if(i==3){s="+5% de prostitution\n+18% de meurtres explosifs";}
            
        }
        else if(type==9){
            if(i==0){
            s="Les armes chimiques peuvent être utilisées pour détruire rapidemment des villes. Attention aux répliques immédiates!";    
            }
            else if(i==1){
            s="Armes chimiques";}
            else if(i==2){s="imagespi\\recChimiqueIc.png";}
            else if(i==3){s="+5% de prostitution\n+19% de meurtres explosifs";}
            
        }
        else if(type==10){
            if(i==0){
            s="Les armes nucléaires peuvent être utilisées pour détruire rapidemment plusieurs villes en même temps. Attention aux répliques immédiates!";  
                
            }
            else if(i==1){
            s="Armes nucléaires";}
            else if(i==2){s="imagespi\\recAtomiqueIc.png";}
            else if(i==3){s="+5% de prostitution\n+20% de meurtres explosifs";}
            
        }
        else if(type==11){
            if(i==0){
            s="Aucune recherche...";  
                
            }
            else if(i==1){
            s="Rien";}
            else if(i==2){s="imagespi\\videIc.png";}
            else if(i==3){s="Aucun effet\n  ";}
            
        }
        
    if(i==0){
        if(s.length()>=30){s=s.substring(0,30)+"\n"+s.substring(30);}
       if(s.length()>61) {s=s.substring(0,60)+"\n"+s.substring(60);}
        if(s.length()>91) {s=s.substring(0,90)+"\n"+s.substring(90);}
        if(s.length()>121) {s=s.substring(0,120)+"\n"+s.substring(120);}
    }
        return s;
    }
}
